Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ


Displaying Rendered β€’ View raw β€’ Download

core/domain/README.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 5.45 KB

T383838:core:domain

Overview

The T383838:core:domain module is the business-logic layer of the KMP architecture. It contains exclusively use-case classes β€” no UI, no platform code, no mutable state. Each use case is a thin orchestrator that coordinates one or more repository/model dependencies to fulfil a single application action.

Targets: Android Β· JVM Β· iOS (via T383838meshtastic.kmp.library convention plugin)

Key Responsibilities

β€’ Orchestrate radio configuration reads/writes (config, module config, channels, owner, position)
β€’ Manage remote-admin session lifecycle (per-node passkey negotiation)
β€’ Process radio admin responses and manage mesh log settings
β€’ Data export (CSV mesh log, profile T383838.zip)
β€’ Profile and security-config import/install
β€’ Node database maintenance (clean, reset, selective purge) and OTA capability checks

Source Structure

T282828
src/commonMain/kotlin/org/meshtastic/core/domain/
β”œβ”€β”€ di/
β”‚ └── CoreDomainModule.kt ← Koin @Module + component scan
└── usecase/
β”œβ”€β”€ session/
β”‚ β”œβ”€β”€ EnsureRemoteAdminSessionUseCase.kt
β”‚ β”œβ”€β”€ EnsureSessionResult.kt
β”‚ └── ObserveRemoteAdminSessionStatusUseCase.kt
└── settings/
β”œβ”€β”€ AdminActionsUseCase.kt
β”œβ”€β”€ CleanNodeDatabaseUseCase.kt
β”œβ”€β”€ ExportDataUseCase.kt
β”œβ”€β”€ ExportProfileUseCase.kt
β”œβ”€β”€ ImportProfileUseCase.kt
β”œβ”€β”€ ImportSecurityConfigUseCase.kt
β”œβ”€β”€ InstallProfileUseCase.kt
β”œβ”€β”€ IsOtaCapableUseCase.kt
β”œβ”€β”€ ProcessRadioResponseUseCase.kt
β”œβ”€β”€ RadioConfigUseCase.kt
└── SetMeshLogSettingsUseCase.kt

Notable APIs

T383838EnsureRemoteAdminSessionUseCase

Ensures a per-node remote-admin passkey session exists before entering the remote admin UI. Uses a T383838Mutex-guarded T383838inFlight map so that double-taps coalesce onto a single T383838Deferred.

T282828
Tff7b72sealed Tff7b72interface T56d364EnsureSessionResult Tb4b4b4{
Tff7b72data Tff7b72object T56d364AlreadyActive Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// passkey already fresh
Tff7b72data Tff7b72object T56d364Refreshed Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// metadata response arrived
Tff7b72data Tff7b72object T56d364Timeout Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// no response within 30 s
Tff7b72data Tff7b72object T56d364Disconnected Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// radio not connected
Tb4b4b4}


T383838RadioConfigUseCase

Radio configuration read/write operations, all returning the T383838packetId for async tracking:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Method β”‚ Description β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ T383838setOwner / T383838getOwner β”‚ Node owner info β”‚
β”‚ T383838setConfig / T383838getConfig β”‚ T383838Config proto (device, position, power, …) β”‚
β”‚ T383838setModuleConfig / T383838getModuleConfig β”‚ T383838ModuleConfig proto β”‚
β”‚ T383838getChannel / T383838setRemoteChannel β”‚ Channel configuration β”‚
β”‚ T383838setFixedPosition / T383838removeFixedPosition β”‚ Fixed GPS position β”‚
β”‚ T383838setRingtone / T383838getRingtone β”‚ External notification ringtone β”‚
β”‚ T383838setCannedMessages / T383838getCannedMessages β”‚ Canned message slots β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

T383838AdminActionsUseCase

T282828
Te6edf3rebootTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3shutdownTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3factoryResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3isLocalTb4b4b4) T8b949e// also clears local NodeDB when isLocal = true
Te6edf3nodedbResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3preserveFavoritesTb4b4b4, Te6edf3isLocalTb4b4b4)


T383838ExportDataUseCase

Streams all mesh log packets to a CSV T383838BufferedSink. Columns: date, time, from, sender name/location, received location/elevation, SNR, distance, hop limit, payload.

Dependency Graph

T282828
core:domain
β”œβ”€β”€ core:repository (use-case interfaces & contracts)
β”œβ”€β”€ core:model (domain models)
β”œβ”€β”€ org.meshtastic:protobufs (Meshtastic protobuf types, Maven)
β”œβ”€β”€ core:common
β”œβ”€β”€ core:database
β”œβ”€β”€ core:datastore
└── core:resources

The generated Mermaid graph below renders project-module edges only β€” external Maven artifacts such as T383838org.meshtastic:protobufs are not shown, and dashed edges are test-only (e.g. T383838:core:testing).

DI

All use cases are registered via Koin component scan on T383838org.meshtastic.core.domain. No manual binding is needed β€” annotate a new use case with T383838@Single and it is picked up automatically.

Dependency Graph

<!--region graph-->
T282828
Te6edf3graph Te6edf3TB
:Te6edf3coreTb4b4b4:Tff7b72domainTff7b72[Te6edf3domainTff7b72]Tff7b72:::Te6edf3kmpTff7b72-Te6edf3library
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3repository
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3model
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3common
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Tff7b72database
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3datastore
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3resources
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3testing

Te6edf3classDef Te6edf3androidTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3applicationTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3composeTff7b72-Te6edf3desktopTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3test Te6edf3fillTb4b4b4:Te6edf3#A0C4FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3jvmTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#BDB2FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Tff7b72unknown Te6edf3fillTb4b4b4:Te6edf3#FFADADTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;


<!--endregion-->

Served by rngit 1.5.0 - Generated in 0.06s